import request from '@/utils/request'

// 设备管理API

/**
 * 获取设备列表（分页）
 * @param {Object} params - 查询参数
 * @param {number} params.page - 页码
 * @param {number} params.size - 页大小
 * @param {string} params.sort - 排序字段
 * @param {string} params.keyword - 搜索关键字
 * @returns {Promise}
 */
export const getDevices = (params = {}) => {
  return request.get('/onvif/devices', params)
}

/**
 * 获取所有设备（不分页）
 * @returns {Promise}
 */
export const getAllDevices = () => {
  return request.get('/onvif/devices/all')
}

/**
 * 根据ID获取设备详情
 * @param {number} id - 设备ID
 * @returns {Promise}
 */
export const getDeviceById = id => {
  return request.get(`/onvif/devices/${id}`)
}

/**
 * 添加设备
 * @param {Object} device - 设备信息
 * @param {string} device.name - 设备名称
 * @param {string} device.ipAddress - IP地址
 * @param {number} device.port - 端口
 * @param {string} device.username - 用户名
 * @param {string} device.password - 密码
 * @param {string} device.manufacturer - 制造商
 * @param {string} device.model - 型号
 * @param {string} device.description - 描述
 * @returns {Promise}
 */
export const createDevice = device => {
  return request.post('/onvif/devices', device)
}

/**
 * 更新设备信息
 * @param {number} id - 设备ID
 * @param {Object} device - 设备信息
 * @returns {Promise}
 */
export const updateDevice = (id, device) => {
  return request.put(`/onvif/devices/${id}`, device)
}

/**
 * 删除设备
 * @param {number} id - 设备ID
 * @returns {Promise}
 */
export const deleteDevice = id => {
  return request.delete(`/onvif/devices/${id}`)
}

/**
 * 启用/禁用设备
 * @param {number} id - 设备ID
 * @param {Object} data - 状态数据
 * @param {boolean} data.enabled - 是否启用
 * @returns {Promise}
 */
export const toggleDeviceEnabled = (id, data) => {
  return request.patch(`/onvif/devices/${id}/enabled`, data)
}

/**
 * 测试设备连接
 * @param {number} id - 设备ID
 * @returns {Promise}
 */
export const testDeviceConnection = id => {
  return request.post(
    `/onvif/devices/${id}/test`,
    {},
    {
      loadingText: '正在测试连接...'
    }
  )
}

/**
 * 刷新设备信息
 * @param {number} id - 设备ID
 * @returns {Promise}
 */
export const refreshDeviceInfo = id => {
  return request.post(
    `/onvif/devices/${id}/refresh`,
    {},
    {
      loadingText: '正在刷新设备信息...'
    }
  )
}

/**
 * 获取设备统计信息
 * @returns {Promise}
 */
export const getDeviceStatistics = () => {
  return request.get(
    '/onvif/devices/statistics',
    {},
    {
      loading: false // 不显示加载动画
    }
  )
}

/**
 * 根据状态获取设备列表
 * @param {string} status - 设备状态 (ONLINE/OFFLINE/ERROR)
 * @returns {Promise}
 */
export const getDevicesByStatus = status => {
  return request.get(`/onvif/devices/by-status/${status}`)
}

/**
 * 获取启用的设备列表
 * @returns {Promise}
 */
export const getEnabledDevices = () => {
  return request.get('/onvif/devices/enabled')
}

/**
 * 批量操作设备
 * @param {Object} data - 批量操作数据
 * @param {number[]} data.ids - 设备ID列表
 * @param {string} data.action - 操作类型 (enable/disable/delete/refresh)
 * @returns {Promise}
 */
export const batchOperateDevices = data => {
  return request.post('/onvif/devices/batch', data, {
    loadingText: '正在执行批量操作...'
  })
}

/**
 * 导出设备列表
 * @param {Object} params - 导出参数
 * @returns {Promise}
 */
export const exportDevices = (params = {}) => {
  return request.download('/onvif/devices/export', params, {
    loadingText: '正在导出设备列表...'
  })
}

/**
 * 导入设备列表
 * @param {FormData} formData - 包含文件的表单数据
 * @returns {Promise}
 */
export const importDevices = formData => {
  return request.upload('/onvif/devices/import', formData, {
    loadingText: '正在导入设备列表...'
  })
}

/**
 * 获取设备日志
 * @param {number} id - 设备ID
 * @param {Object} params - 查询参数
 * @param {number} params.page - 页码
 * @param {number} params.size - 页大小
 * @param {string} params.level - 日志级别
 * @param {string} params.startTime - 开始时间
 * @param {string} params.endTime - 结束时间
 * @returns {Promise}
 */
export const getDeviceLogs = (id, params = {}) => {
  return request.get(`/onvif/devices/${id}/logs`, params)
}

/**
 * 清空设备日志
 * @param {number} id - 设备ID
 * @returns {Promise}
 */
export const clearDeviceLogs = id => {
  return request.delete(`/onvif/devices/${id}/logs`, {
    loadingText: '正在清空日志...'
  })
}

/**
 * 获取设备性能指标
 * @param {number} id - 设备ID
 * @param {Object} params - 查询参数
 * @param {string} params.startTime - 开始时间
 * @param {string} params.endTime - 结束时间
 * @param {string} params.interval - 时间间隔
 * @returns {Promise}
 */
export const getDeviceMetrics = (id, params = {}) => {
  return request.get(`/onvif/devices/${id}/metrics`, params)
}

/**
 * 重启设备
 * @param {number} id - 设备ID
 * @returns {Promise}
 */
export const rebootDevice = id => {
  return request.post(
    `/onvif/devices/${id}/reboot`,
    {},
    {
      loadingText: '正在重启设备...'
    }
  )
}

/**
 * 获取设备能力集
 * @param {number} id - 设备ID
 * @returns {Promise}
 */
export const getDeviceCapabilities = id => {
  return request.get(`/onvif/devices/${id}/capabilities`)
}

/**
 * 同步设备时间
 * @param {number} id - 设备ID
 * @returns {Promise}
 */
export const syncDeviceTime = id => {
  return request.post(
    `/onvif/devices/${id}/sync-time`,
    {},
    {
      loadingText: '正在同步时间...'
    }
  )
}

/**
 * 获取设备网络配置
 * @param {number} id - 设备ID
 * @returns {Promise}
 */
export const getDeviceNetworkConfig = id => {
  return request.get(`/onvif/devices/${id}/network`)
}

/**
 * 更新设备网络配置
 * @param {number} id - 设备ID
 * @param {Object} config - 网络配置
 * @returns {Promise}
 */
export const updateDeviceNetworkConfig = (id, config) => {
  return request.put(`/onvif/devices/${id}/network`, config, {
    loadingText: '正在更新网络配置...'
  })
}

/**
 * 批量更新设备
 * @param {number[]} deviceIds - 设备ID列表
 * @param {Object} updateData - 更新数据
 * @returns {Promise}
 */
export const batchUpdateDevices = (deviceIds, updateData) => {
  return request.post('/onvif/devices/batch/update', {
    deviceIds,
    updateData
  }, {
    loadingText: '正在批量更新设备...'
  })
}

/**
 * 批量删除设备
 * @param {number[]} deviceIds - 设备ID列表
 * @returns {Promise}
 */
export const batchDeleteDevices = (deviceIds) => {
  return request.post('/onvif/devices/batch/delete', {
    deviceIds
  }, {
    loadingText: '正在批量删除设备...'
  })
}

/**
 * 批量同步时间
 * @param {number[]} deviceIds - 设备ID列表
 * @returns {Promise}
 */
export const batchSyncTime = (deviceIds) => {
  return request.post('/onvif/devices/batch/sync-time', {
    deviceIds
  }, {
    loadingText: '正在批量同步时间...'
  })
}

/**
 * 批量重启设备
 * @param {number[]} deviceIds - 设备ID列表
 * @returns {Promise}
 */
export const batchRebootDevices = (deviceIds) => {
  return request.post('/onvif/devices/batch/reboot', {
    deviceIds
  }, {
    loadingText: '正在批量重启设备...'
  })
}

/**
 * 批量导出配置
 * @param {number[]} deviceIds - 设备ID列表
 * @returns {Promise}
 */
export const batchExportConfigs = (deviceIds) => {
  return request.post('/onvif/devices/batch/export-configs', {
    deviceIds
  }, {
    loadingText: '正在批量导出配置...',
    responseType: 'blob'
  })
}
